/*
    定义日志消息类, 进行日志中间信息的存储：
    - 日志等级
    - 对应的logger name (项目支持多日志器)
    - 日志输出的源文件位置信息
    - 线程ID
    - 时间信息
    - 具体的日志消息内容
*/

#ifndef __M_MSG_H__
#define __M_MSG_H__

#include "util.hpp"
#include "level.hpp"
#include <thread>
#include <memory>

namespace LOG
{
    //调用构造函数 完成一条日志消息的构造
    struct LogMsg
    {
        using ptr = std::shared_ptr<LogMsg>;
        size_t _line;           // 行号
        size_t _ctime;          // 时间
        std::thread::id _tid;   // 线程ID
        std::string _name;      // 日志器名称
        std::string _file;      // 文件名
        std::string _payload;   // 日志消息
        LogLevel::value _level; // 日志等级
        LogMsg(const std::string &name, std::string file, size_t line, std::string&& payload, LogLevel::value level) : _name(name), _file(file), _payload(std::move(payload)),
                                                                                                                 _level(level), _line(line), _ctime(util::Date::now()), _tid(std::this_thread::get_id())
        {
            // std::cout << "LogMsg 构造" << std::endl;
            // std::cout << _payload << std::endl;
        }
        ~LogMsg()
        {
            // std::cout << "LogMsg 析构" << std::endl;
        }
    };
}

#endif